Bigquery Standard SQL

yamotonalds

2016-10-20

2週間ほど前…

🐼「おっ」

ちなみに

2016-06-02

Standard SQL Beta

While we think the updated dialect is a wonderful addition, there's no requirement that users switch, and for production use cases, we recommend users remain on the legacy SQL dialect. After we have a few more miles on the new dialect, we plan to launch it to general availability and recommend it as the default language for all projects.

2016-10-04

Migrating from legacy SQL

Migration from legacy SQL to standard SQL is recommended but not required.

窓に!窓に!

というわけで。

Bigquery Standard SQL

について予習しておきましょう🐼

Legacyからの変更点

注意

  • Migrating from legacy SQLに書いてある内容からピックアップしただけ
  • 数が多いので駆け足
  • 気になるやつがあったらアピールしてね!

(止まるとは言ってない)

SELECT中にSELECTが使えるようになった

こういうのはダメ

WITHを使えばOK

  • CREATE TEMPORARY TABLE みたいなやつ
  • 複数定義可能

型名の変更

Legacy Standard
INTEGER INT64
FLOAT FLOAT64
RECORD STRUCT
REPEATED ARRAY

オプションの統一

Legacy Standard
REQUIRED
NULLABLE
NULLABLE

識別子のくくり方

Legacy Standard
[sample.foo] `sample.foo`

プロジェクト識別子のセパレーター

Legacy Standard
project-name:dataset.table project-name.dataset.table

SELECTリストの最後のカンマ

Legacy Standard
SELECT 1,2,3, FROM SELECT 1,2,3 FROM

TABLE_DATE_RANGE

浪速のスーパーユニオン

混ぜるな危険

LegacyのViewをStandardのクエリからは使えない

(逆もダメ)

CASTの挙動

Legacy Standard
INTEGER(1.5)
切り捨て
CAST(1.5 AS INTEGER)
四捨五入

実行時エラー

Legacy Standard
SELECT 1 / 0
NULL
SELECT 1 / 0
Error: division by zero

他: オーバーフロー, 無効なCAST

安全な0除算: SAFE_DIVIDE

CREATE TEMPORARY FUNCTION

UDF(User-Defined Functions)

  • セミコロン区切りでいくつも定義可能
  • プログラムで関数を共有すれば楽に使いまわせそう
  • INT64はjs側に対応する型が無いのでSTRINGになる
    • 先ほどのAdd1の型をINT64にすると結果は 101 (文字列結合)

まとめ(感想とか)

  • 標準的なSQLに近くなる
  • エラーとかCASTの挙動とか細かい所も変わってるので一括置換とかじゃなくて1つ1つ確認した方が良さそう
  • 1つ1つのクエリ実行時にはLegacyかStandardか選べるけどViewの互換性が無いのでなるべく一気に移行するのが良さそう

飛ばした内容

  • RECORD(ARRAY)関係ばっさり
  • その他こまごま

🐼「ここから先は君自身の目で確かめてくれ!」